package park.model.place;
import java.io.Serializable;
import java.util.Collection;
import java.util.HashSet;

import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.EqualsBuilder;

import park.model.moment_interval.Estada;
import park.model.role.Funcionario;
/**
 * @archetype party-place-thing
 * @author gilberto
 * @since 22/04/2009
 */

public class Estacionamento implements Serializable {
	private static final long serialVersionUID = 1L;
	private Integer cdEstacionamento;
	private String endereco;
	private Integer qtdeVagas;
	/*
	 * Estacionamento can have zero or more Estadias 
	 */
	private Collection<Estada> estadias = new HashSet<Estada>();
	/*
	 * Estacionamento can have zero or more Funcionarios 
	 */
	private Collection<Funcionario> funcionarios = new HashSet<Funcionario>();

	
	public Estacionamento(){}
	public Estacionamento(Integer cdEstacionamento, String endereco, Integer qtdVagas){
		this.cdEstacionamento = cdEstacionamento;
		this.endereco = endereco;
		this.qtdeVagas = qtdVagas;
	}
	
	public Integer getCdEstacionamento() {return cdEstacionamento;}
	public void setCdEstacionamento(Integer cdEstacionamento) {this.cdEstacionamento = cdEstacionamento;}
	public Collection<Estada> getEstadias() {return estadias;}
	public void setEstadias(Collection<Estada> estadias) {this.estadias = estadias;}
	public Collection<Funcionario> getFuncionarios() {return funcionarios;}
	public void setFuncionarios(Collection<Funcionario> funcionarios) {this.funcionarios = funcionarios;}
	public String getEndereco() {return endereco;}
	public void setEndereco(String endereco) {this.endereco = endereco;	}
	public Integer getQtdeVagas() {return qtdeVagas;}
	public void setQtdeVagas(Integer qtdeVagas) {this.qtdeVagas = qtdeVagas;}

	@Override
	public boolean equals(final Object other) {
		if (this == other)
			return true;
		if (!(other instanceof Estacionamento))
			return false;
		Estacionamento castOther = (Estacionamento) other;
		return new EqualsBuilder()
				.append(cdEstacionamento, castOther.cdEstacionamento)
				.append(endereco, castOther.endereco)
				//.append(funcionarios, castOther.funcionarios)  collection field
				//.append(estadas, castOther.estadas)  collection field
				.append(qtdeVagas, castOther.qtdeVagas).isEquals();
	}

	@Override
	public int hashCode() {
		return new HashCodeBuilder()
				.append(endereco)
				.append(cdEstacionamento)
				//.append(funcionarios)  collection field
				//.append(estadas)  collection field
				.append(qtdeVagas).toHashCode();
	}

	@Override
	public String toString() {
		return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
				.appendSuper(super.toString())
				.append("cdEstacionamento", cdEstacionamento)
				.append("endereco", endereco)
				.append("qtdeVagas", qtdeVagas).toString();
	}
}
